import datetime
import random
import uuid

from django.db.models import *

from extensions.models import *
from apps.common.models import CbspBaseModel


# 综合业务支撑人员管理系统基本信息
class Cbsp_Bi_Records(CbspBaseModel):
    # 综合业务支撑人员管理系统基本信息
    company = ForeignKey('system.Company', on_delete=CASCADE, blank=True, null=True, default=None,related_name='Cbsp_Bi_Records_company', db_constraint=False)  # 填报公司
    employee_number = CharField(max_length=255,unique=True, verbose_name='员工编号', null=True, blank=True)#员工编号
    name = CharField(max_length=255, verbose_name='姓名', null=True, blank=True)#姓名
    sfz_number = CharField(max_length=255, unique=True, verbose_name='身份证号码', null=True, blank=True)#身份证号码
    employment_line = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_employment_line',db_constraint=False)  #用工条线
    #专业
    major = CharField(max_length=255, verbose_name='专业', null=True, blank=True) #专业
    #部门（机构）名称
    department = CharField(max_length=255, verbose_name='部门（机构）名称', null=True, blank=True)  #部门（机构）名称
    #班组
    team = CharField(max_length=255, verbose_name='班组', null=True, blank=True)  #班组
    #网格
    grid = CharField(max_length=255, verbose_name='网格', null=True, blank=True)  #网格
    #职名
    job_title = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_job_title',db_constraint=False)  #职名
    #职级
    job_level = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_job_level',db_constraint=False)  #职级
    #人员状态
    status = BooleanField(default=True)  #人员状态
    #是否核心骨干岗位
    is_core = BooleanField(default=False)  #是否核心骨干岗位
    #担任当前职位日期
    job_date = DateField(null=True, blank=True)  #担任当前职位日期
    #个人特长
    personal_specialty = CharField(max_length=255, verbose_name='个人特长', null=True, blank=True)#个人特长

    def __str__(self):
        return self.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

    # def save(self, *args, **kwargs):
    #     if not self.id:  # 只在对象尚未保存时才设置 id
    #         self.id = self.generate_unique_id()
    #     super().save(*args, **kwargs)

# 人员基础信息
class Cbsp_Bi_Records_Personnel(CbspBaseModel):
    # 人员基础信息
    #基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, unique=True,null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Personnel_cbsp_bi',db_constraint=False)  #基本信息
    #出生日期
    birthday = DateField(null=True, blank=True)  #根据身份证编号自动计算出生日期
    # 性别
    gender = CharField(max_length=10,null=True, blank=True,verbose_name='性别')  # 根据身份证编号自动计算出生日期
    #民族
    nation = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Personnel_nation',db_constraint=False)  #民族
    #婚姻状况
    marital_status = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Personnel_marital_status',db_constraint=False)  #婚姻状况
    #用工合作企业全称
    employment_cooperation = CharField(max_length=255, verbose_name='用工合作企业全称', null=True, blank=True)  #用工合作企业全称
    #籍贯
    native_place = CharField(max_length=255, verbose_name='籍贯', null=True, blank=True)  #籍贯
    # 户口类别
    household_type = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Personnel_household_type',db_constraint=False)  # 户口类别
    # 户口所在地
    household_address = CharField(max_length=255, verbose_name='户口所在地', null=True, blank=True)  # 户口所在地
    # 是否为“建档立卡”人员
    is_archiving = BooleanField(default=False)  # 是否为“建档立卡”人员
    # 健康状况
    health_status = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Personnel_health_status',db_constraint=False)  # 健康状况


    def __str__(self):
        return self.cbsp_bi.sfz_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Personnel.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

    # 根据身份证号码自动计算出生日期、年龄、性别
    def update_birthday_gender(self):
        if self.cbsp_bi.sfz_number:
            id_number = self.cbsp_bi.sfz_number
            if len(id_number) in [15, 18]:
                # 计算出生日期
                if len(id_number) == 15:
                    year = 1900 + int(id_number[6:8])
                    month = int(id_number[8:10])
                    day = int(id_number[10:12])
                else:
                    year = int(id_number[6:10])
                    month = int(id_number[10:12])
                    day = int(id_number[12:14])
                birthdate = datetime.date(year, month, day)
                self.birthday = birthdate
                # 计算性别
                if int(id_number[-2]) % 2 == 0:
                    gender = "女"
                else:
                    gender = "男"
                self.gender = gender
                self.save()

#学历信息
class Cbsp_Bi_Records_Education(CbspBaseModel):
    #基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Education_cbsp_bi',db_constraint=False)  #基本信息
    #最高学历
    highest_education = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Education_highest_education',db_constraint=False)  #最高学历
    #是否全日制
    is_full_time = BooleanField(default=False) #是否全日制
    #最高学历获取方式
    highest_education_way = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Education_highest_education_way',db_constraint=False)  #最高学历获取方式
    #毕业院校
    graduate_school = CharField(max_length=255, verbose_name='毕业院校', null=True, blank=True)  #毕业院校
    #毕业年月
    graduate_date = DateField(null=True, blank=True)  #毕业年月
    #专业
    major = CharField(max_length=255, verbose_name='专业', null=True, blank=True)  #专业
    #"学历证书编号（或毕业证书编号）"
    education_certificate_number = CharField(max_length=255, verbose_name='学历证书编号（或毕业证书编号）', null=True, blank=True)  #"学历证书编号（或毕业证书编号）"
    #学历是否验证
    is_education_verification = BooleanField(default=False)#学历是否验证
    #验证时间
    verification_date = DateField(null=True, blank=True)  #验证时间
    #验证人
    verification_person = CharField(max_length=255, verbose_name='验证人', null=True, blank=True)  #验证人
    #是否有学士学位证书
    is_bachelor_degree = BooleanField(default=False)#是否有学士学位证书
    #学位等级
    bachelor_degree_level = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Education_bachelor_degree_level',db_constraint=False)  #学位等级
    #获取学士学位证书时间
    bachelor_degree_date = DateField(null=True, blank=True)  #获取学士学位证书时间
    #学位证书编号
    bachelor_degree_number = CharField(max_length=255, verbose_name='学位证书编号', null=True, blank=True)  #学位证书编号
    #学位类型
    bachelor_degree_type = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Education_bachelor_degree_type',db_constraint=False)  #学位类型


    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Education.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

#联系信息
class Cbsp_Bi_Records_Contact(CbspBaseModel):
    #基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Contact_cbsp_bi',db_constraint=False)  #基本信息
    #现居住地址
    current_address = CharField(max_length=255, verbose_name='现居住地址', null=True, blank=True)  #现居住地址
    #通信或邮寄地址
    mailing_address = CharField(max_length=255, verbose_name='通信或邮寄地址', null=True, blank=True)  #通信或邮寄地址
    #联系电话
    phone = CharField(max_length=255, verbose_name='联系电话', null=True, blank=True)  #联系电话
    #电子邮箱
    email = CharField(max_length=255, verbose_name='电子邮箱', null=True, blank=True)  #电子邮箱
    #微信号
    wechat = CharField(max_length=255, verbose_name='微信号', null=True, blank=True)  #微信号
    #紧急联系人姓名
    emergency_contact_name = CharField(max_length=255, verbose_name='紧急联系人姓名', null=True, blank=True)  #紧急联系人姓名
    #紧急联系人关系
    emergency_contact_relationship = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Contact_emergency_contact_relationship',db_constraint=False)  #紧急联系人关系
    #紧急联系人电话
    emergency_contact_phone = CharField(max_length=255, verbose_name='紧急联系人电话', null=True, blank=True)  #紧急联系人电话

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Contact.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

#工作信息
class Cbsp_Bi_Records_Work(CbspBaseModel):
    # 基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Work_cbsp_bi',db_constraint=False)  # 基本信息
    #用工来源
    employment_source = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Work_employment_source',db_constraint=False)  #用工来源
    # 是否参加入职培训
    is_entry_training = BooleanField(default=False)# 是否参加入职培训
    # 是否通过入职培训考核
    is_entry_training_assessment = BooleanField(default=False)# 是否通过入职培训考核
    # 是否全职
    is_full_time = BooleanField(default=False)# 是否全职
    # 在职状态
    on_job_status = BooleanField(default=True)  #在职状态
    # 首次参加工作时间
    first_work_date = DateField(null=True, blank=True)  # 首次参加工作时间
    # 首次服务铁通时间
    first_service_date = DateField(null=True, blank=True)  # 首次服务铁通时间
    # 是否入职体检
    is_entry_physical_examination = BooleanField(default=False)# 是否入职体检
    # 转正时间
    positive_date = DateField(null=True, blank=True)  # 转正时间
    # 服务铁通工作年限
    # service_years = IntegerField(null=True, blank=True)  # 服务铁通工作年限
    # 现劳动合同起始时间
    current_contract_start_date = DateField(null=True, blank=True)  # 现劳动合同起始时间
    # 现劳动合同终止时间
    current_contract_end_date = DateField(null=True, blank=True)  # 现劳动合同终止时间
    # 用工合作企业全称
    employment_cooperation_enterprise = CharField(max_length=255, verbose_name='用工合作企业全称', null=True, blank=True)  # 用工合作企业全称
    # 是否专兼职
    is_full_part_time = BooleanField(default=False)# 是否专兼职
    # 专兼职驾驶员/安全员情况
    full_part_time_driver_safety_officer = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Work_full_part_time_driver_safety_officer',db_constraint=False)  # 专兼职驾驶员/安全员情况
    # 是否办理离职手续
    is_resignation_procedures = BooleanField(default=False)# 是否办理离职手续
    # 离职时间
    resignation_date = DateField(null=True, blank=True)  # 离职时间
    # 离职原因
    resignation_reason = CharField(max_length=255, verbose_name='离职原因', null=True, blank=True) # 离职原因
    # "是否成功发放“劳动关系和社保缴纳告知书”"
    is_labor_social_security_notice = BooleanField(default=False)# "是否成功发放“劳动关系和社保缴纳告知书”"

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Work.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

#证书信息
class Cbsp_Bi_Records_Certificate(CbspBaseModel):
    # 基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Certificate_cbsp_bi',db_constraint=False)  # 基本信息
    # 是否持有电工证
    is_electrician_certificate = BooleanField(default=False)# 是否持有电工证
    # 电工证发证机关
    electrician_certificate_issuing_authority = CharField(max_length=255, verbose_name='电工证发证机关', null=True, blank=True)  # 电工证发证机关
    # 电工证取证日期
    electrician_certificate_acquisition_date = DateField(null=True, blank=True)  # 电工证取证日期
    # 电工证截止有效期
    electrician_certificate_validity_period = DateField(null=True, blank=True)  # 电工证截止有效期
    # 电工证证书编号
    electrician_certificate_number = CharField(max_length=255, verbose_name='电工证证书编号', null=True, blank=True)  # 电工证证书编号
    # 是否复审
    is_review_electrician_certificate = BooleanField(default=False)# 是否复审
    # 是否持有登高证
    is_high_altitude_certificate = BooleanField(default=False)# 是否持有登高证
    # 登高证发证机关
    high_altitude_certificate_issuing_authority = CharField(max_length=255, verbose_name='登高证发证机关', null=True, blank=True)  # 登高证发证机关
    # 登高证取证日期
    high_altitude_certificate_acquisition_date = DateField(null=True, blank=True)  # 登高证取证日期
    # 登高证截止有效期
    high_altitude_certificate_validity_period = DateField(null=True, blank=True)  # 登高证截止有效期
    # 登高证证书编号
    high_altitude_certificate_number = CharField(max_length=255, verbose_name='登高证证书编号', null=True, blank=True)  # 登高证证书编号
    # 是否复审
    is_review_high_altitude_certificate = BooleanField(default=False)# 是否复审
    # 是否持有线务证
    is_line_certificate = BooleanField(default=False)# 是否持有线务证
    # 线务证发证机关
    line_certificate_issuing_authority = CharField(max_length=255, verbose_name='线务证发证机关', null=True, blank=True)  # 线务证发证机关
    # 线务证取证日期
    line_certificate_acquisition_date = DateField(null=True, blank=True)  # 线务证取证日期
    # 线务证截止有效期
    line_certificate_validity_period = DateField(null=True, blank=True)  # 线务证截止有效期
    # 线务证证书编号
    line_certificate_number = CharField(max_length=255, verbose_name='线务证证书编号', null=True, blank=True)  # 线务证证书编号
    # 是否复审
    is_review_line_certificate = BooleanField(default=False)# 是否复审
    # 是否通过移动代维资格认证
    is_mobile_maintenance_qualification_certification = BooleanField(default=False)# 是否通过移动代维资格认证
    # # 移动代维资格认证等级
    # mobile_maintenance_qualification_certification_level = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Certificate_mobile_maintenance_qualification_certification_level',db_constraint=False)  # 等级
    # # 移动代维资格认证专业
    # mobile_maintenance_qualification_certification_major = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Certificate_mobile_maintenance_qualification_certification_major',db_constraint=False)  # 专业
    # 移动代维资格认证子专业
    # mobile_maintenance_qualification_certification_sub_major = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True,default=None, related_name='Cbsp_Bi_Records_Certificate_mobile_maintenance_qualification_certification_sub_major',db_constraint=False)  # 子专业
    # 移动代维资格认证等级
    mobile_maintenance_qualification_certification_level = CharField(max_length=255, verbose_name='移动代维资格认证等级', null=True, blank=True)
    # 移动代维资格认证专业
    mobile_maintenance_qualification_certification_major = CharField(max_length=255, verbose_name='移动代维资格认证专业', null=True, blank=True)
    # 移动代维资格认证子专业
    mobile_maintenance_qualification_certification_sub_major = CharField(max_length=255, verbose_name='移动代维资格认证子专业', null=True, blank=True)
    # 移动代维资格认证签发日期
    mobile_maintenance_qualification_certification_issuing_date = DateField(null=True, blank=True)  # 签发日期
    # 移动代维资格认证有效时间
    mobile_maintenance_qualification_certification_validity_period = DateField(null=True, blank=True)  # 有效时间
    # 其他重要证书名称
    other_important_certificate_name = CharField(max_length=255, verbose_name='其他重要证书名称', null=True, blank=True)  # 其他重要证书名称
    # 发证机关
    other_important_certificate_issuing_authority = CharField(max_length=255, verbose_name='发证机关', null=True, blank=True)  # 发证机关
    # 取证日期
    other_important_certificate_acquisition_date = DateField(null=True, blank=True)  # 取证日期
    # 证书截止有效期
    other_important_certificate_validity_period = DateField(null=True, blank=True)  # 证书截止有效期
    # 证书编号
    other_important_certificate_number = CharField(max_length=255, verbose_name='证书编号', null=True, blank=True)  # 证书编号

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Certificate.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

#商业险信息
class Cbsp_Bi_Records_Commercial_Insurance(CbspBaseModel):
    #基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True, default=None, related_name='Cbsp_Bi_Records_Commercial_Insurance',db_constraint=False)  # 基本信息
    #险种类型
    insurance_type = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None, related_name='Cbsp_Bi_Records_Commercial_Insurance_insurance_type',db_constraint=False)  # 险种类型
    # 购买时间
    purchase_date = DateField(null=True, blank=True)  # 购买时间
    # 生效时间
    effective_date = DateField(null=True, blank=True)  # 生效时间
    # 失效时间
    expiration_date = DateField(null=True, blank=True)  # 失效时间
    # 保额
    insured_amount = DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)  # 保额
    # 承保保险公司名称
    underwriting_insurance_company_name = CharField(max_length=255, verbose_name='承保保险公司名称', null=True, blank=True)  # 承保保险公司名称
    # "保险经办人姓名"
    insurance_agent_name = CharField(max_length=255, verbose_name='保险经办人姓名', null=True, blank=True)  # "保险经办人姓名"
    # "保险复核人姓名"
    insurance_reviewer_name = CharField(max_length=255, verbose_name='保险复核人姓名', null=True, blank=True)  # "保险复核人姓名"

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Commercial_Insurance.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

# 党群信息
class Cbsp_Bi_Records_Party_Group(CbspBaseModel):
    # 基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Party_Group',db_constraint=False)  # 基本信息
    #政治面貌
    political_status = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Party_Group_political_status',db_constraint=False)  # 政治面貌
    # "加入党团组织年月"
    join_party_group_date = DateField(null=True, blank=True)  # "加入党团组织年月"
    # 是否民主党派
    is_democratic_party = BooleanField(default=False)  # 是否民主党派
    # 民主党派名称
    democratic_party_name = CharField(max_length=255, verbose_name='民主党派名称', null=True, blank=True)  # 民主党派名称

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Party_Group.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id


# 技能信息
class Cbsp_Bi_Records_Skill(CbspBaseModel):
    # 基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Skill',db_constraint=False)  # 基本信息
    # 是否有驾照
    is_driving_license = BooleanField(default=False)  # 是否有驾照
    # 驾照类型
    driving_license_type = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Skill_driving_license_type',db_constraint=False)  # 驾照类型
    # 驾龄
    driving_years = IntegerField(null=True, blank=True)  # 驾龄
    # 是否专兼职驾驶员
    is_professional_driver = BooleanField(default=False)  # 是否专兼职驾驶员
    # 评定条线
    # evaluation_line = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Skill_evaluation_line',db_constraint=False)  # 评定条线
    employment_line = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Skill_employment_line',db_constraint=False)  # 评定条线
    # 星评等级
    star_rating = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Skill_star_rating',db_constraint=False)  # 星评等级
    # 生效时间
    effective_date = DateField(null=True, blank=True)  # 生效时间
    # 失效时间
    expiration_date = DateField(null=True, blank=True)  # 失效时间

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Skill.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id

# 社保等个人金融信息
class Cbsp_Bi_Records_Personal_Finance(CbspBaseModel):
    # 基本信息
    cbsp_bi = ForeignKey('Cbsp_Bi_Records', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Personal_Finance',db_constraint=False)  # 基本信息
    # 社保缴纳单位名称
    social_security_unit_name = CharField(max_length=255, verbose_name='社保缴纳单位名称', null=True, blank=True)  # 社保缴纳单位名称
    # 社保个人账户
    social_security_personal_account = CharField(max_length=255, verbose_name='社保个人账户', null=True, blank=True)  # 社保个人账户
    # 首次缴纳社保时间
    first_payment_of_social_security = DateField(null=True, blank=True)  # 首次缴纳社保时间
    # 公积金缴纳单位名称
    provident_fund_unit_name = CharField(max_length=255, verbose_name='公积金缴纳单位名称', null=True, blank=True)  # 公积金缴纳单位名称
    # 公积金个人账户
    provident_fund_personal_account = CharField(max_length=255, verbose_name='公积金个人账户', null=True, blank=True)  # 公积金个人账户
    # 首次缴纳公积金时间
    first_payment_of_provident_fund = DateField(null=True, blank=True)  # 首次缴纳公积金时间
    # 医保类型
    medical_insurance_type = ForeignKey('system.Dict_item', on_delete=SET_NULL, null=True, blank=True, default=None,related_name='Cbsp_Bi_Records_Personal_Finance_medical_insurance_type',db_constraint=False)  # 医保类型
    # 首次医保缴纳时间
    first_payment_of_medical_insurance = DateField(null=True, blank=True)  # 首次医保缴纳时间
    # 是否发放医保卡
    is_medical_insurance_card = BooleanField(default=False)  # 是否发放医保卡
    # 银行全称
    bank_full_name = CharField(max_length=255, verbose_name='银行全称', null=True, blank=True)  # 银行全称
    # 开户分/支行全称
    branch_full_name = CharField(max_length=255, verbose_name='开户分/支行全称', null=True, blank=True)  # 开户分/支行全称
    # 卡号
    card_number = CharField(max_length=255, verbose_name='卡号', null=True, blank=True)  # 卡号

    def __str__(self):
        return self.cbsp_bi.employee_number

    def generate_unique_id(self):
        unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        while Cbsp_Bi_Records_Personal_Finance.objects.filter(id=unique_id).exists():
            unique_id = random.randint(10 ** 8, 10 ** 9 - 1)
        return unique_id


__all__ = [
    'Cbsp_Bi_Records',
    'Cbsp_Bi_Records_Personnel',
    'Cbsp_Bi_Records_Education',
    'Cbsp_Bi_Records_Contact',
    'Cbsp_Bi_Records_Work',
    'Cbsp_Bi_Records_Certificate',
    'Cbsp_Bi_Records_Commercial_Insurance',
    'Cbsp_Bi_Records_Party_Group',
    'Cbsp_Bi_Records_Skill',
    'Cbsp_Bi_Records_Personal_Finance',
]







